package transient关键字;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class TransientTest {

    /*
     *（1）一旦变量被transient修饰，变量将不再是对象持久化的一部分，该变量内容在序列化后无法被访问。
     *（2） transient关键字只能修饰变量，而不能修饰方法和类。
     *      注意，本地变量是不能被transient关键字修饰的。
     *     变量如果是用户自定义类变量，则该类需要实现Serializable接口。
     *（3）一个静态变量不管是否被transient修饰，均不能被序列化
     *    (如果反序列化后类中static变量还有值，则值为当前JVM中对应static变量的值)。
     *   序列化保存的是对象状态，静态变量保存的是类状态，因此序列化并不保存静态变量。
     */
    public static void main(String[] args) throws Exception {
        User user = new User();
        user.setName("哈哈哈");
        user.setPassword("123456");
        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("user"));
        os.writeObject(user);
        os.flush();
        os.close();
        ObjectInputStream is = new ObjectInputStream(new FileInputStream("user"));
        User user2 = (User) is.readObject();
        System.out.println("反序列化后用户名:" + user2.getName());
        System.out.println("反序列化后用户名:" + user2.getPassword());
    }
    
}
